package com.luomo.java.spring.aop;

//import org.junit.Test;
//import org.junit.runner.RunWith;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootVersion;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.SpringVersion;
//import org.springframework.test.context.junit4.SpringRunner;

/**
 * @author LiuMei
 * @date 2021-04-20.
 */
@SpringBootTest
//@RunWith(SpringRunner.class)
public class AopTest {

    @Autowired
    CalcService calcService;

    /**
     * 正常情况：
     * ===spring 版本：4.3.13.RELEASE spring boot 版本：1.5.9.RELEASE
     * ****** @Around 环绕通知之前AAA
     * ****** @Before 前置通知
     * ========>CalcServiceImpl被调用，返回结果：5
     * ****** @Around 环绕通知之后BBB
     * ****** @After 后置通知
     * ****** @AfterReturning 返回后通知
     *
     * @Around前->@Before->@Around后->@After->@AfterReturning
     *
     * 异常情况：
     * ===spring 版本：4.3.13.RELEASE spring boot 版本：1.5.9.RELEASE
     * <p>
     * ****** @Around 环绕通知之前AAA
     * ****** @Before 前置通知
     * ****** @After 后置通知
     * ****** @AfterThrowing 异常通知
     * <p>
     * java.lang.ArithmeticException: / by zero
     * @Around前->@Before->@After->@AfterThrowing
     */
    @Test
    public void testAop4() {
        System.out.println("===spring 版本：" + SpringVersion.getVersion() + " spring boot 版本：" + SpringBootVersion.getVersion());
        System.out.println();
//        calcService.div(10,2);
        calcService.div(10, 0);
    }

    /**
     * 正常情况：
     * ===spring 版本：5.3.2 spring boot 版本：2.4.1
     * <p>
     * ****** @Around 环绕通知之前AAA
     * ****** @Before 前置通知
     * ========>CalcServiceImpl被调用，返回结果：5
     * ****** @AfterReturning 返回后通知
     * ****** @After 后置通知
     * ****** @Around 环绕通知之后BBB
     *@Around前->@Before->@AfterReturning->@After->@Around后
     *
     * <p>
     * 异常情况：
     * ===spring 版本：5.3.2 spring boot 版本：2.4.1
     * <p>
     * ****** @Around 环绕通知之前AAA
     * ****** @Before 前置通知
     * ****** @AfterThrowing 异常通知
     * ****** @After 后置通知
     * <p>
     * <p>
     * java.lang.ArithmeticException: / by zero
     * @Around前->@Before->@AfterThrowing->@After
     */
    @Test
    public void testAop5() {
        System.out.println("===spring 版本：" + SpringVersion.getVersion() + " spring boot 版本：" + SpringBootVersion.getVersion());
        System.out.println();
//        calcService.div(10,2);
        calcService.div(10, 0);
    }

}
